package web.suzy.oj.service.admin.system.impl;

import cn.hutool.json.JSONObject;
import org.springframework.stereotype.Service;
import web.suzy.oj.common.exception.StatusFailException;
import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.manager.admin.system.ConfigManager;
import web.suzy.oj.pojo.dto.*;
import web.suzy.oj.service.admin.system.ConfigService;

import javax.annotation.Resource;

/**
 * YangSuzy 软件工作室
 * 类名: ConfigServiceImpl
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/29 14:17
 */
@Service
public class ConfigServiceImpl implements ConfigService {
    @Resource
    private ConfigManager configManager;

    /**
     * 方法名: getServiceInfo
     * 描述: 获取当前服务的相关信息
     *
     * @return web.suzy.oj.common.result.ResultBean<cn.hutool.json.JSONObject>
     * @date 2022/11/29 14:18
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<JSONObject> getServiceInfo() {
        return ResultBean.successResponse(configManager.getServiceInfo());
    }

    /**
     * 方法名: getWebConfig
     * 描述: 获取网站基本配置信息
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.WebConfigDTO>
     * @date 2022/11/29 14:38
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<WebConfigDTO> getWebConfig() {
        return ResultBean.successResponse(configManager.getWebConfig());
    }

    /**
     * 方法名: setWebConfig
     * 描述: 设置网站基本配置信息
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 14:57
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> setWebConfig(WebConfigDTO config) {
        try {
            configManager.setWebConfig(config);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }

    /**
     * 方法名: getEmailConfig
     * 描述: 获取邮箱配置信息
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.EmailConfigDTO>
     * @date 2022/11/29 15:01
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<EmailConfigDTO> getEmailConfig() {
        return ResultBean.successResponse(configManager.getEmailConfig());
    }

    /**
     * 方法名: setEmailConfig
     * 描述: 设置邮箱配置信息
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 15:06
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> setEmailConfig(EmailConfigDTO config) {
        try {
            configManager.setEmailConfig(config);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }

    /**
     * 方法名: testEmail
     * 描述: 测试发送邮件功能
     *
     * @param testEmailDto 测试邮箱
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 15:10
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> testEmail(TestEmailDTO testEmailDto) {
        try {
            configManager.testEmail(testEmailDto);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }

    /**
     * 方法名: getDBAndRedisConfig
     * 描述: 获取数据库和 Redis的配置
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.DBAndRedisConfigDTO>
     * @date 2022/11/29 21:47
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<DBAndRedisConfigDTO> getDBAndRedisConfig() {
        return ResultBean.successResponse(configManager.getDBAndRedisConfig());
    }

    /**
     * 方法名: setDBAndRedisConfig
     * 描述: 设置数据库和 Redis的配置
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/30 9:05
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> setDBAndRedisConfig(DBAndRedisConfigDTO config) {
        try {
            configManager.setDBAndRedisConfig(config);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }

    /**
     * 方法名: getSwitchConfig
     * 描述: 获取功能开关配置信息
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.SwitchConfigDTO>
     * @date 2022/11/30 10:24
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<SwitchConfigDTO> getSwitchConfig() {
        return ResultBean.successResponse(configManager.getSwitchConfig());
    }

    /**
     * 方法名: setSwitchConfig
     * 描述: 设置功能开关配置
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/30 10:32
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> setSwitchConfig(SwitchConfigDTO config) {
        try {
            configManager.setSwitchConfig(config);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }

    /**
     * 方法名: deleteHomeCarousel
     * 描述: 删除主页轮播图文件
     *
     * @param id 图片文件ID
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/30 10:41
     * @auther YangSuzy
     **/
    @Override
    public ResultBean<Void> deleteHomeCarousel(Long id) {
        try {
            configManager.deleteHomeCarousel(id);
            return ResultBean.successResponse();
        } catch (StatusFailException e) {
            return ResultBean.errorResponse(e.getMessage());
        }
    }
}
